itertools 組み合わせ| python
組み合わせの4つ類型が参考になる。
n種類(ここでは4))のものからk個(ここでは2。2次元にmapする)を選ぶ際に、どういう選び方があるか?
replacementがtrue, false
得られたものの順番を気にするかどうか?
この2つの違いから、4つのやり方がでてくる。
リーグ戦の対戦表のイメージで見る
replacementがtrueで、得たものに関する順番を気にしない。
product('ABCD', repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
デカルト積 4x4 = 16
replacementがfalseで、得たものに関する順番を気にしない、自分とは対戦しないけど、裏返しは残しておく。
permutations('ABCD', 2) AB AC AD BA BC BD CA CB CD DA DB DC
木構造を考える。 4x3 = 12
replacementがfalseで、得たものに関する順番を気にする. これはよくある対戦表。4人来れば6試合組む。
combinations('ABCD', 2) AB AC AD BC BD CD
上の順列(permuation) で順序による重複があるのをユニーク化 (階乗から順序の違い分をわったもの)
2つによるの組み合わせなので、(4x3)/2 = 6
replacementがtrueで、得たものに関する順番を気にしない。replaceがTrue. 福引みたいな大きな箱からのイメージ
combinations_with_replacement('ABCD', 2) AA AB AC AD BB BC BD CC CD DD
現実世界でも、replacementが真の場合は多いので、その場合に、組み合わせパターンを列挙するのに役立つ?
4x4 - (3x2) = 10
行列の下(上でも)三角部分が順番に関する重複で外れるイメージ。
3次元になると、
code: about3.py
[64, 24, 4, 20]
となる。
累乗(4^3)=64、階乗(4x3x2x1), 組み合わせ(4!/3!), 最後は.....3次元なので...どう考える??